package com.feng.util;
import com.feng.domain.entity.Menu;
import com.feng.domain.vo.MenuTreeVo;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
//
public class SystemConverter {

    private SystemConverter() {
    }


    public static List<MenuTreeVo> buildMenuSelectTree(List<Menu> menus) {
        //用stream流将其转化为MenuTreeVo的集合，将id，name，父id进行赋值，Children暂时不用
        List<MenuTreeVo> MenuTreeVos = menus.stream()
                .map(m -> new MenuTreeVo(m.getId(), m.getMenuName(), m.getParentId(), null))
                .collect(Collectors.toList());
        //对Children进行赋值
        List<MenuTreeVo> options = MenuTreeVos.stream()
                //过滤出一级分类
                .filter(o -> o.getParentId().equals(0L))
                //给每个一级分类设置children
                .map(o -> o.setChildren(getChildList(MenuTreeVos, o)))
                .collect(Collectors.toList());


        return options;
    }


    /**
     * 得到子节点列表
     */
    private static List<MenuTreeVo> getChildList(List<MenuTreeVo> list, MenuTreeVo option) {
        List<MenuTreeVo> options = list.stream()
                //扫描到当前分类的父分类id等于该传过来的一级分类的id
                .filter(o -> Objects.equals(o.getParentId(), option.getId()))
                //递归调用，扫描到的子分类接着进行调用此方法
                .map(o -> o.setChildren(getChildList(list, o)))
                .collect(Collectors.toList());
        return options;

    }
}
